`ifndef TEST_SV
`define TEST_SV

`include "transaction.svh"

module automatic test;
	initial begin
		trans_a tra1, tra2;
		trans_b trb1, trb2;

		tra1 = new(); // 创建基类对象
		tra2 = new(1); // 创建基类副本对象
		trb1 = new(2, 3); // 创建派生类对象
		trb2 = new(); // 创建派生类副本对象

		tra1.print("tra1"); // 打印基类对象内容
		tra2.print("before copy, tra2"); // 打印复制前基类副本对象内容
		trb1.print("trb1"); // 打印派生对象内容
		trb2.print("before copy, trb2"); // 打印复制前派生类副本对象内容

		tra2.copy(tra1); // 基类对象到基类对象的复制
		tra2.print("copy tra1, tra2"); // 打印复制后基类副本对象内容

		tra2.copy(trb1); // 派生类对象到基类对象的复制
		tra2.print("copy trb1, tra2"); // 打印复制后基类副本对象内容

		trb2.copy(tra1); // 基类对象到基类对象的复制，复制失败
		trb2.print("copy tra1, trb2"); // 打印复制后派生类副本对象内容

		trb2.copy(trb1); // 派生类对象到派生类对象的复制
		trb2.print("copy trb1, trb2"); // 打印复制后派生类副本对象内容
	end
endmodule

`endif
